Expo CLI
https://gyazo.com/a5a0b8e7e575db5aae9f4f5a763eae3c
commands
もしかしたらこれもversion追ったほうがいいかもなmrsekut.icon
Expo SDKととの整合性もあるっぽいし
2021/12/17
expo-cli v5.0.2
2021/10/16
expo-cli v4.12.0
$ EXPO_USE_EXOTIC=1 expo start
bundleが高速になった
その高速化の理由について解説されている
全てのJS fileはruntimeに送る前に変換が必要
大まかに2つのグループに分けられる
application code
開発に伴って変化が激しい
node modules
npm iとかしない限りは内容が変わらないので静的なものとみなせる
最適化の1つは、コードの変換をskipすること
しかし、import/export構文などをruntimeが理解できないとエラーになる
これを避けるためにbabelを使う
babelはカスタマイズしやすいが、カスタマイズに依ってbuildが遅くなる
RN + TSだと多段階に変換が必要
import/export → ts → jsx → other
MetroはBabelを使って、全てのfileを変換する
だから遅い
本来は全部変換する必要はない
既にcommonjsをサポートしているlibrary
e.g. React
node module内に元々あるlibraryは、babelで追加したカスタマイズを適用する必要はない
node moduleをsucraseを使ってtranspileする
速いから
transpileさえできれば十分だから
bundleとかは不要
Flowをサポートしているから
RNの内部実装はFlowで書かれている
内部実装がJSだから
Rust/Goに詳しくなくてもメンテできる (expo-cliの実装者が)
https://miro.medium.com/max/1400/1*CqJF-PC33tQ0yIueed_q1A.gif https://blog.expo.dev/drastically-faster-bundling-in-react-native-a54f268e0ed1
なんだかんだめっちゃ複雑だな
上部のAppilicationの箇所は、
開発に伴って変化し続けるのでBabelを使う
Babelはカスタマイズすると遅くなるが仕方がない
node moddules部分は静的なfileと見れる
CommonJSをサポートしているライブラリは変換が不要なのでスキップ
e.g. React, lodash
それ以外の部分はSucraseで変換
Babelより速い
Babelカスタマイズが不要なのでBabelを使う必要がない
2022/4/28
expo-cliではなく、$ npx expoで使えってことか
紛らわしいので、globalでinstallしてるexpo-cliを消したいが、npx expoはまだbetaなのか?
イマイチ立ち位置がよくわからん
expo-cliも今まで通り使えるのか
Betaで使える機能 (2021/10現在のbeta)